#ifndef _SETTING_GUI_H_
#define _SETTING_GUI_H_

#include "lvgl.h"
#include <functional>

#include "SettingConfigUI.h"

namespace SettingUI
{
    struct WifiInfo
    {
        char essid[128];    // 帐号
        char psk[128];      // 密码
        char address[32];   // wifi ap物理地址
        char freq[32];      // 频段
        bool encryptionKey; // 是否具有密钥
        char bitRates[64];  // 比特率Mbit/s
        int level;          // 信号强度，最大100%
        int id;
        bool connected; // 是否是已连接的wifi
    };

    struct NetInfo
    {
        char essid[128];  // 已连接的wifi帐号
        char address[32]; // 网卡物理地址
        char ipAddr[32];  // 内网ip地址
        int rxPackets;    // 已发送数据包个数
        int txPackets;    // 已接收数据包个数
        int rxBytes;      // 已接收字节数
        int txBytes;      // 已发送字节数
    };

    using ExitCb = std::function<void(void)>;
    using SetBrightnessCb = std::function<void(int)>;
    using GetBrightnessCb = std::function<int(void)>;
    using SetVolumeCb = std::function<void(int)>;
    using GetVolumeCb = std::function<int(void)>;
    using PoweroffCb = std::function<void(void)>;
    using RebootCb = std::function<void(void)>;
    using WlanScanCb = std::function<void(void)>;
    using ConnectApCb = std::function<void(int, const char *, const char *)>; // 参数分别是wifi id，若id为-1则使用wifi名称和密码
    using DisconnectApCb = std::function<void(int)>;                          // 参数为wifi id
    using ChangePasswordCb = std::function<void(int, const char *)>;          // 参数为wifi id和新密码

    struct Operations
    {
        ExitCb exitCb;                 // 退出进程回调函数
        SetBrightnessCb setBrightness; // 设置背光回调函数
        GetBrightnessCb getBrightness; // 获取背光回调函数
        SetVolumeCb setVolume;         // 设置音量回调函数
        GetVolumeCb getVolume;         // 获取音量回调函数
        WlanScanCb wlanScan;           // 扫描WIFI
        ConnectApCb connectAp;         // 连接wifi回调函数
        DisconnectApCb disconnectAp;   // 断开wifi连接回调函数
        ChangePasswordCb changePwd;    // 修改已保存wifi密码回调函数
        PoweroffCb poweroff;           // 关机回调函数
        RebootCb reboot;               // 重启回调函数

        GetConfigCb getConfig;  // 获取配置回调函数
        SaveConfigCb saveConfig; // 保存配置回调函数
    };

    void create(Operations &opts);
    void updateNetInfo(NetInfo &info);
    void addWiFiList(WifiInfo &info);
    void connectingContCreate(void);
    void setGOTIPStatus(bool status);
    void setConnectStatus(bool status);
    void setConnectOver(bool status);
    void release(void);

};

#endif
